import {
    createStore,
    applyMiddleware,
    Store,
   AnyAction,
   Dispatch,
 } from "redux";
 import reducers, { CombinedState } from "./reducers";
 import logger from "redux-logger";
 import thunk, { ThunkDispatch } from "redux-thunk";
 import promise from "redux-promise";
 import { routerMiddleware } from "connected-react-router";
 import { persistStore, persistReducer } from "redux-persist";
 import storage from "redux-persist/lib/storage";
 import history from "./history";
 const persistConfig = {
   key: "root",
   storage,
   whitelist: ["cart"],
 };
 const persistedReducer = persistReducer(persistConfig, reducers);
 let store: Store<CombinedState, AnyAction> = createStore<
   CombinedState,
   AnyAction,
   {},
   {}
 >(
   persistedReducer,
   applyMiddleware(thunk, routerMiddleware(history), promise, logger)
 );
 let persistor = persistStore(store);
 export type StoreGetState = () => CombinedState;
 export type StoreDispatch = Dispatch &
   ThunkDispatch<CombinedState, any, AnyAction>;
 export { store, persistor };